/*
Automatic clinic tests using a robot arm.
Copyright (C) 2010  CIC-CPC, CHU Gabriel Montpied
All other trademarks, logos and copyrights are the property
of their respective owners.

This file is part of cpc-painbot.

cpc-painbot is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

cpc-painbot is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public License
along with cpc-painbot.  If not, see <http://www.gnu.org/licenses/>.
*/

#ifndef METHODE_WINDUP_H
#define METHODE_WINDUP_H
#include "seuil/methode.h"

namespace seuil {
namespace methode {

/*! Méthode Wind Up.
    Cette méthode consiste à stimuler une Zone précise de manière répétée à une fréquence donnée.
    Le nombre de répétitions est fixé, et, en cas de douleur trop intense, la méthode doit être
    interruptible à tout moment.
*/
class WindUp : public Methode
{
Q_OBJECT
//! Fréquence des répétitions (en ms)
Q_PROPERTY(int frequence READ frequence WRITE setFrequence NOTIFY frequenceChangee)

//! Nombre de répétitions restant à effectuer.
Q_PROPERTY(int restant READ restant NOTIFY restantChange)

//! Nombre de répétitions total.
Q_PROPERTY(int total READ total WRITE setTotal NOTIFY totalChange)
public:
    //! Constructeur.
    explicit WindUp(QObject *parent = 0);

    //! Fréquence de la méthode (en ms)
    int frequence() const { return frequence_; }

    //! Nombre de répétitions restant.
    int restant() const { return restant_; }

    //! Nombre de répétitions total.
    int total() const { return total_; }

    QVariant valeur() const { return 0; }
    QString unite() const { return "aucune"; }

signals:
    void frequenceChangee(int frequence_ms);
    void restantChange(int restant);
    void totalChange(int total);

public slots:
    void setFrequence(int frequence_ms) { frequence_ = frequence_ms; emit frequenceChangee(frequence_); }
    void setRestant(int restant) { restant_ = restant; emit restantChange(restant_); }
    void setTotal(int total) { total_ = total; setRestant(total); emit totalChange(total_); }
    void douleur(const QVariant &douleur);

protected:
    void determiner() { qWarning("Pas encore implemente"); }
    int frequence_; //!< Fréquence d'exécution.
    int restant_;   //!< Nombre de répétitions restant.
    int total_;     //!< Nombre de répétitions total.
    QList<qreal> douleurs_; //!< Valeurs des douleurs aux différents moments.
};

} // namespace methode
} // namespace seuil

#endif // WINDUP_H
